// 权限拦截    路由的导航守卫的文件, 后期自己实现
// 1. 引入路由
import router from '@/router'
// 引入store
import store from '@/store'
// 导入nprogress包和样式文件
import nProgress from 'nprogress'
import 'nprogress/nprogress.css'

// 2. 添加前置导航守卫拦截页面
// to from 是路由信息对象, next是放行函数
const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  // 开启nprogress
  nProgress.start()
  const token = store.getters.token
  // 判断是否有token
  if (token) {
    // 登录过还去访问登录页面, 强制跳转到首页
    if (to.path === '/login') {
      next('/')
      // 被next拦截的页面 是不会经过后置导航守卫的,  需要手动关闭nprogress
      nProgress.done()
      // 登录后访问的是别的页面直接放行
    } else {
      // 获取个人信息, 获取成功后再放行
      // 判断是否是否从登录页面来的  只获取一次个人信息
      // if (from.path === '/login') {
      //   const res = await store.dispatch('user/getUserInfo')
      //   console.log(res) // -挖坑 这个res中有一个roles 是一个对象 包含登录用户权限信息, 后期我们回来处理权限
      // }
      if (!store.getters.name) {
        const res = await store.dispatch('user/getUserInfo')
        console.log(res)
      }
      next()
    }
  } else {
    //   没有登录先判断是否去的是白名单页面
    if (whiteList.includes(to.path)) {
      next()
    } else {
      // 没有登录还访问的不是白名单页面, 强制重新登录
      next('/login')
      // 被next拦截的页面 是不会经过后置导航守卫的, 需要手动关闭
      nProgress.done()
    }
  }
})

// 后置导航守卫
router.afterEach((to, from) => {
  // 关闭nprogress
  nProgress.done()
})
